package com.yueyang.sojourn.server.common.repeatable;

import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by liguohui on 2019/4/26.
 */
public class SpelExpressionParserUtil {

    /**
     * 模板参数解析，动态生成需要的模板数据，遵循spring的spel表达式；常量用''包含起来，常量与动态参数之间，用+连接。
     * eg：'你好,这里是XXXX，你是：'+#name+'；环境加入我们;'+#date，有两个参数：name，date
     * @param el
     * @param context
     * @return
     */
    public static String parser(String el,Map<String,Object> context){
        EvaluationContext evalContext = new StandardEvaluationContext();
        for (String key : context.keySet()) {
            evalContext.setVariable(key, context.get(key));
        }
        if(context == null || context.size() == 0){
            return el;
        }
        ExpressionParser parser = new SpelExpressionParser();
        String value = parser.parseExpression(el).getValue(evalContext).toString();
        return value;
    }

    public static void main(String[] args){
        String el = "'你好,这里是XXXX，你是：'+#name+'；环境加入我们;'+#date";
        Map<String,Object> context = new HashMap<>();
        context.put("name","zhangsan");
        context.put("date",(new Date()).toLocaleString());
        System.out.println(parser(el,context));
    }
}
